package com.lagou.task13;

import java.lang.reflect.Array;
import java.util.*;
/*
3. 编程题


使用集合实现斗地主游戏的部分功能，要求如下：
（1）首先准备 54 张扑克牌并打乱顺序。
（2）由三个玩家交替摸牌，每人 17 张扑克牌，最后三张留作底牌。
（3）查看三个玩家手中的扑克牌和底牌。
（4）其中玩家手中的扑克牌需要按照大小顺序打印，规则如下：
手中扑克牌从大到小的摆放顺序：大王,小王,2,A,K,Q,J,10,9,8,7,6,5,4,3
 */
public class DouDiZhuTest {


        public static void showPoker(int i, List<Integer> list, Map<Integer, String> pokerMap) {
            if (i <= 3) {
                System.out.print("第" + i + "个玩家的扑克牌有：");
            } else {
                System.out.print("底牌有：");
            }
            for (Integer integer : list) {
                System.out.print(pokerMap.get(integer) + " ");
            }
            System.out.println();
        }

        public static void main(String[] args) {

            //（1）首先准备 54 张扑克牌并打乱顺序。
            List<String> pointList = Arrays.asList("2", "A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4", "3");
            String[] colorList={"hei","hong","mei","fang"};
            // 2.准备Map集合来存放生成的54张扑克牌，指定扑克牌的编号作为key，使用扑克牌作为value，从而实现对应关系的建立
            // 建立关系的目的是为了后续便于打乱后还能从大到小进行排序，需要单独记录所有编号
            Map<Integer, String> pokerMap = new HashMap<>();
            List<Integer> numberList = new ArrayList<>();
            // 2.1 单独存放大小王并指定编号
            int cnt = 1;
            numberList.add(cnt);
            pokerMap.put(cnt++, "大王");
            numberList.add(cnt);
            pokerMap.put(cnt++, "小王");

            // 2.2 存放花色和点数组合出来的52张扑克牌
            for (String point : pointList) {
                for (String color : colorList) {
                    numberList.add(cnt);
                    pokerMap.put(cnt++, color+point);
                }
            }
            System.out.println(pokerMap);
            Collections.shuffle(numberList);//打乱扑克牌的顺序


            // 4.准备4个集合来记录3个玩家的扑克牌和底牌，当然使用上述洗牌之后的编号进行发牌
            List<Integer> player1 = new ArrayList<>();
            List<Integer> player2 = new ArrayList<>();
            List<Integer> player3 = new ArrayList<>();
            List<Integer> remains = new ArrayList<>();
            for (int i = 0; i < numberList.size(); i++) {
                Integer integer = numberList.get(i);
                if (i >= 51) {
                    remains.add(integer);
                } else if (0 == i%3) {
                    player1.add(integer);
                } else if (1 == i%3) {
                    player2.add(integer);
                } else {
                    player3.add(integer);
                }
            }

            // 5.根据扑克牌的编号实现从大到小的排序
            Collections.sort(player1);
            Collections.sort(player2);
            Collections.sort(player3);
            Collections.sort(remains);
//
//        System.out.println("玩家1的手牌是："+player1);
//        System.out.println("玩家2的手牌是："+player2);
//        System.out.println("玩家3的手牌是："+player3);
//       System.out.println("底牌是："+remains);
            // 6.再根据Map集合中的对应关系打印所有玩家的扑克牌和底牌
            showPoker(1, player1, pokerMap);
            showPoker(2, player2, pokerMap);
            showPoker(3, player3, pokerMap);
            showPoker(4, remains, pokerMap);
        }
    }